package net.butfly.bus.server.invoker;

import net.butfly.bus.config.detail.InvokerConfig;
import net.butfly.bus.impl.Invoker;
import net.butfly.bus.impl.InvokerProvider;
import net.butfly.bus.server.config.detail.RemoteConfig;
import net.butfly.bus.server.config.detail.SpringConfig;
import net.butfly.bus.server.invoker.impl.RemoteProvider;
import net.butfly.bus.server.invoker.impl.SpringProvider;

public class InvokerTypeFactory {
	public static InvokerConfig getConfig(Class<? extends InvokerProvider> invokerClass) {
		if (SpringProvider.class.equals(invokerClass))
			return new SpringConfig();
		if (RemoteProvider.class.equals(invokerClass))
			return new RemoteConfig();
		return null;
	}

	public static InvokerProvider getProvider(Class<? extends InvokerProvider> invokerClass, InvokerConfig invokerConfig) {
		if (SpringProvider.class.equals(invokerClass))
			return SpringProvider.getInstance(invokerConfig);
		if (RemoteProvider.class.equals(invokerClass))
			return RemoteProvider.getInstance(invokerConfig);
		return null;
	}

	public static Invoker getInvoker(Class<? extends InvokerProvider> invokerClass, InvokerConfig invokerConfig) {
		InvokerProvider provider = getProvider(invokerClass, invokerConfig);
		return provider != null ? provider.createInvoker() : null;
	}
}
